iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
Software Development

Laravel 隨筆學習札記系列 第 26

Day26 - 簡化認證:用 Laravel Authentication 建立使用者登入

  • 分享至 

  • xImage
  •  

先來看看官方網站怎摸說吧!

Introduction

Many web applications provide a way for their users to authenticate with the application and "login". Implementing this feature in web applications can be a complex and potentially risky endeavor. For this reason, Laravel strives to give you the tools you need to implement authentication quickly, securely, and easily.

At its core, Laravel's authentication facilities are made up of "guards" and "providers". Guards define how users are authenticated for each request. For example, Laravel ships with a session guard which maintains state using session storage and cookies.

Providers define how users are retrieved from your persistent storage. Laravel ships with support for retrieving users using Eloquent and the database query builder. However, you are free to define additional providers as needed for your application.

Your application's authentication configuration file is located at config/auth.php. This file contains several well-documented options for tweaking the behavior of Laravel's authentication services.

我理解的意思是在說

很多網頁應用程式都會讓使用者進行身份驗證和登錄。但是要實現這個功能其實挺複雜的,也有一定的風險。因此,Laravel 就提供了兩個認證系統「guards」和「providers」,讓我們可以快速、安全、簡單地做這件事情,我們可以在 config/auth.php 找到應用程式的認證配置文件

  • 「guards」是用來定義每次使用者請求怎麼被驗證的。比如說,Laravel 有一個「session guard」,它通過 session storage 和 Cookie 來保持使用者的狀態。
  • 「providers」則是決定使用者的資料要怎麼從儲存的地方找出來。Laravel 支持通過 Eloquent 和資料庫查詢生成器來檢索使用者。

Authentication Quickstart

我們來看看要如何使用 Authentication

Install a Starter Kit

首先,我們需要安裝一個 Laravel 應用程式的啟動套件。有兩個可以選擇唷

  • Laravel Breeze
    我覺得這個功能比較簡單,如果是做小專案可安裝這個就好!
    Laravel Breeze 包含登錄、註冊、密碼重置、電子郵件驗證和密碼確認等功能。使用簡單的 Blade 模板和 Tailwind CSS 進行樣式設計。
  • Laravel Jetstream
    Laravel Jetstream 的功能比較多支援用 Livewire 或 Inertia 以及 Vue 進行應用。Jetstream 還提供選擇性功能,像是雙重身份驗證、團隊管理、個人資料管理、瀏覽器會話管理、API 支持(通過 Laravel Sanctum)以及帳戶刪除等功能。

Retrieving the Authenticated User

安裝好認證啟動套件後,使用者可以進行註冊和登錄。這時,在處理使用者的請求時,可以使用 Auth 的 user 方法來獲取當前已驗證的使用者,這樣就能方便地與該用戶進行互動,滿足後續需求。

use Illuminate\Support\Facades\Auth;

// 獲取當前已驗證的用戶
$user = Auth::user();

// 獲取當前已驗證用戶的 ID
$id = Auth::id();

當使用者登錄後,我們可以在控制器中通過加入 Illuminate\Http\Request 物件來獲取已驗證的使用者。這樣,我們就能使用請求的 user 方法輕鬆獲得當前使用者的訊息。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;

class FlightController extends Controller
{
    /**
     * 更新現有航班的信息
     */
    public function update(Request $request): RedirectResponse
    {
        $user = $request->user();

        // ...

        return redirect('/flights');
    }
}

Determining if the Current User is Authenticated

我們要如何知道發送請求的使用者是否已被驗證,可以使用 Auth 的 check 方法。這個方法若是返回 true,就表示使用者已登錄:

(通常會再使用 middleware 來確保使用者在進入某些路由或控制器之前已經登錄。)

use Illuminate\Support\Facades\Auth;

if (Auth::check()) {
    // 用戶已登錄
}

Protecting Routes

使用 Route middleware 來限制已驗證的使用者才能進入特定的路由。Laravel 提供了 auth middleware,這樣我們只需將其附加到路由定義上:

use Illuminate\Auth\Middleware\Authenticate

Route::get('/flights', function () {
    // 只有已驗證的用戶可以訪問這個路由
})->middleware('auth');

Redirecting Unauthenticated Users

當 auth middleware 檢測到未驗證的使用者時,會將其倒回到登錄頁面。我們可以通過應用 bootstrap/app.php 文件 redirectGuestsTo 方法的來修改這個行為:

use Illuminate\Http\Request;

->withMiddleware(function (Middleware $middleware) {
    $middleware->redirectGuestsTo('/login');

    // 使用 closure
    $middleware->redirectGuestsTo(fn (Request $request) => route('login'));
})

Specifying a Guard

在把 auth middleware 附加到路由時,我們可以指定使用哪個「guard」來驗證用戶。

要注意的是!這個 guard 的名稱要和 auth.php 配置文件中的 guards 陣列裡的 keys 對應。這樣,系統就知道用哪種方式來檢查使用者的身份

Route::get('/flights', function () {
    // 只有已驗證的使用者可以進入這個路由
})->middleware('auth:admin');

Login Throttling

如果使用 Laravel Breeze 或 Laravel Jetstream,登錄嘗試會自動受到 login attempts 。一般預設的情況下,如果使用者在幾次嘗試後未能提供正確的憑據,他們將在一分鐘內無法登錄。這個限制是針對使用者的使用者名稱、電子郵件地址和 IP 地址來進行的。


使用 Laravel Authentication 能輕鬆讓使用者進行身份驗證:

  1. 輕鬆上手:安裝 Laravel Breeze 或 Jetstream 啟動套件,讓我們可以快速搭建登錄、註冊等功能,不需要從頭開始。
  2. 靈活配置:你可以根據需要自定義身份驗證的方式,這樣不管是小專案還是大型應用,都能適應。
  3. 安全性考量:Laravel 自動加密密碼,還能限制登錄嘗試次數,這樣就能有效防止黑客攻擊,讓你的應用更安全。
  4. 方便管理用戶:只要簡單幾行代碼,就能輕鬆獲取和管理已驗證的用戶資料,讓開發變得更高效。

參考資料:

  1. How to Setup Laravel Login Authentication in 2024 [Easy Steps]
  2. Laravl官方網站 - Authentication

踏著身心靈的塔羅腳步,轉向技術與邏輯的工程師之路,就藉由塔羅日抽來紀錄今日的學習與生活吧!

錢幣三:好唷!看到錢幣牌總還要跟自己說,今天的自己也是很棒有在努力呢~這張牌感覺是在說可以找人合作,那我就當作是在提醒我,鐵人賽不只是獨自完成,也是可以找人討論,讓自己的理解可以更透徹~

“We love our girl, every messy beautiful part of her.”

我們愛你,包括所有凌亂不堪、美麗的部份

— 腦筋急轉彎2


上一篇
Day25 - 善用 Laravel Events 提升代碼重用性
下一篇
Day27 - Gates 與 Policies:Laravel 中的權限管理解決方案
系列文
Laravel 隨筆學習札記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言